package com.offcn.controller;


import com.offcn.pojo.Setmeal;
import com.offcn.redis.RedisConstant;
import com.offcn.service.SetmealService;
import com.offcn.utils.MessageConstant;
import com.offcn.utils.PageResult;
import com.offcn.utils.QueryPageBean;
import com.offcn.utils.Result;
import org.apache.dubbo.config.annotation.Reference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author xinyi
 * @since 2021-07-14
 */
@RestController
@RequestMapping("/setmeal")
public class SetmealController {

    @Reference
    private SetmealService setmealService;

    @Autowired
    private RedisTemplate<String,String> redisTemplate;

    /*setmeal.html页面的分页查询方法QueryPageBean对象里封装下面的几项然后整体对象作为参数传递，也就等同于前台获取的获取参数时使用的response*/
//    private Integer currentPage;//页码
//    private Integer pageSize;//每页记录数
//    private String queryString;//查询条件
    @RequestMapping("/getAllSetmeal")
    public PageResult getAllSetmeal(@RequestBody QueryPageBean queryPageBean){
        return setmealService.getAllSetmeal(queryPageBean);
    }

    /*setmeal.html页面里的王文建上传方法，处理从页面直接action提交发送过来的post请求*/
    @RequestMapping(value = "/uploadpic" ,method = RequestMethod.POST)
    public Result uploadpic(MultipartFile imgFile){
//        System.out.println("进入了uploadpic方法");
        /*1 图片存储路径*/
        String fileDir = "F:\\setmealpic\\uploadpic\\images";
        /*2 获取原始上传文件的名称*/
        String originalFilename = imgFile.getOriginalFilename();
        /*3 为图片取唯一名称*/
        String newFileName = UUID.randomUUID().toString() + "&&" + originalFilename;
        /*4 构造一个File对象*/
        File file = new File(fileDir, newFileName);
        /*5 上传*/
        try {
            imgFile.transferTo(file);
            String path = "images/" + newFileName;
//            System.out.println("path为：——————————————————————————————" + path);
            /*上传成功后把图片路径添加到redis中*/
            redisTemplate.opsForSet().add(RedisConstant.SETMEAL_PIC_UPLOAD,path);


            return new Result(true,MessageConstant.PIC_UPLOAD_SUCCESS,path);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return new Result(false, MessageConstant.PIC_UPLOAD_FAIL);
    }


    /*setmeal.html页面的套餐添加方法，传递的参数为添加的套餐对象和放检查组id的数组*/
    @RequestMapping("/addSetmeal")
    public Result addSetmeal(@RequestBody Setmeal setmeal,Integer[] checkgroupIds){
        Result result = setmealService.addSetmeal(setmeal, checkgroupIds);
        if (result.isFlag()){
            redisTemplate.opsForSet().add(RedisConstant.SETMEAL_PIC_DB,setmeal.getImg());
        }
        return result;
    }

    /*setmeal.html页面的编辑套餐的回显数据方法，这里传递的是row.id也就是行id，主表id 发送请求查询该条记录的数据进行数据的回显，回显组的方法发到了组controller里*/
    @RequestMapping("/getSetmealById/{id}")
    public Setmeal getSetmealById(@PathVariable("id") Integer id){
        return setmealService.getSetmealById(id);
    }

    /*setmeal.html页面的套餐的方法，在回显套餐主表数据和检查组数据之后，修改需要传递主表对象和选中的检查组id，然后在删除所有的数据之后进行数据数据的添加*/
    @RequestMapping("/editSetmeal")
    public Result editSetmeal(@RequestBody Setmeal setmeal,Integer[] checkgroupIds){
        Result result = setmealService.editSetmeal(setmeal, checkgroupIds);
        if (result.isFlag()){
            redisTemplate.opsForSet().add(RedisConstant.SETMEAL_PIC_DB,setmeal.getImg());
        }
        return result;
    }

    /*setmeal.html页面的套餐的删除方法，需要先删除中间表这里传递的id是row.id，也就是主表id*/
    @RequestMapping("/deleteSetmealById/{id}")
    public Result deleteSetmealById(@PathVariable("id") Integer id){
        Result result = setmealService.deleteSetmealById(id);
//        Setmeal setmeal = setmealService.getSetmealById(id);
//        if (result.isFlag()){
//            redisTemplate.opsForSet().remove(MessageConstant.DELETE_LOCALPIC_SUCCESS,setmeal.getImg());
//        }
        return result;
    }

    /*每个月注册会员数量统计*/
    @RequestMapping("/r_getSetmealReport")
    public Result getSetmealReport(){
        return setmealService.getSetmealReport();
    }
}

